#define _CRT_SECURE_NO_WARNINGS 1

//#include<string>
//#include<iostream>
//
//using namespace std;

//bool Func(char ch)
//{
//    if (ch >= '0' && ch <= '9')
//    {
//        return true;
//    }
//    return false;
//}
//
//int myAtoi(string str)
//{
//    int temp = INT_MAX / 10;
//    int ret = 0;
//    int i = 0;
//    int sign = 1;
//    while (str[i] == ' ')
//    {
//        if (i + 1 > str.size())
//        {
//            return 0;
//        }
//        i++;
//    }
//    if (str[i] == '-')
//    {
//        sign = -1;
//    }
//    if (str[i] == '-' || str[i] == '+')
//    {
//        i++;
//    }
//    for (int j = i; j < str.size(); j++)
//    {
//        if (!Func(str[j]))
//        {
//            return 0;
//        }
//        if (ret > temp || (ret == temp && str[j] > '7'))
//        {
//            return sign == 1 ? INT_MAX : INT_MIN;
//        }
//        ret = ret * 10 + (str[j] - '0');
//    }
//    return ret * sign;
//}
//
//int main()
//{
//    string str("4193 with words");
//
//    int ret = myAtoi(str);
//
//    return 0;
//}



#include<string>
#include<iostream>

using namespace std;

bool Func(char ch)
{
    if (((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) || ch >= '0' && ch <= '9')
    {
        return true;
    }
    return false;
}

bool isPalindrome(string s)
{
    int flag = 1;
    for (int i = 0; i < s.size(); i++)
    {
        if (!Func(s[i]))
        {
            flag = -1;
        }
        if (s[i] >= 'A' && s[i] <= 'Z')
        {
            s[i] += 32;
        }
    }
    if (flag == -1)
    {
        return true;
    }
    int left = 0, right = s.size() - 1;
    while (left <= right)
    {
        while (left <= right && !Func(s[left]))
        {
            left++;
        }
        while (left <= right && !Func(s[right]))
        {
            right--;
        }
        if (s[left++] != s[right--])
        {
            return false;
        }
    }
    return true;
}

int main()
{
    string s(" ");

    cout << isPalindrome(s) << endl;

	return 0;
}